﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using IUAP.DAL.Intranet;
using IUAP.DAL;

/// <summary>
/// Descripción breve de CursoEnPeriodo
/// </summary>
namespace IUAP.BLL.Intranet
{
    public class CursoEnPeriodo : BaseIntranet
    {
        public CursoEnPeriodo()
        {

        }

        public CursoEnPeriodo(int _id_curso
            , int _id_periodo
            , string _doce_usua
            , bool _cierre_curso
            , bool _actv_encu
            , string _form_curso)
        {
            this.Id_curso = _id_curso;
            this.Id_periodo = _id_periodo;
            this.Doce_usua = _doce_usua;
            this.Cierre_curso = _cierre_curso;
            this.Actv_encu = _actv_encu;
            this.Form_curso = _form_curso;
        }

        int id_curso = 0;

        public int Id_curso
        {
            get { return id_curso; }
            set { id_curso = value; }
        }
        int id_periodo = 0;

        public int Id_periodo
        {
            get { return id_periodo; }
            set { id_periodo = value; }
        }
        string doce_usua = "";

        public string Doce_usua
        {
            get { return doce_usua; }
            set { doce_usua = value; }
        }
        bool cierre_curso = false;

        public bool Cierre_curso
        {
            get { return cierre_curso; }
            set { cierre_curso = value; }
        }
        bool actv_encu = false;

        public bool Actv_encu
        {
            get { return actv_encu; }
            set { actv_encu = value; }
        }
        string form_curso = "";

        public string Form_curso
        {
            get { return form_curso; }
            set { form_curso = value; }
        }
        public bool Update()
        {
            return UpdateCursoEnPeriodo(this.Id_curso, this.Id_periodo, this.Doce_usua);
        }
        public static int InsertCursoEnPeriodo(int id_curso, int id_periodo, string doce_usua)
        {
            CursoEnPeriodoDetalles record = new CursoEnPeriodoDetalles(id_curso, id_periodo, doce_usua, false, false, "");
            int ret = SiteProvider.Intranet.InsertCursoEnPeriodo(record);
            BizObject.PurgeCacheItems("Intranet_CursosEnPeriodo");
            return ret;
        }
        public static bool UpdateCursoEnPeriodo(int id_curso, int id_periodo, string doce_usua)
        {
            bool ret = SiteProvider.Intranet.UpdateCursoEnPeriodo(id_curso, id_periodo, doce_usua);
            BizObject.PurgeCacheItems("Intranet_CursoEnPeriodo");
            return ret;
        }
        public static bool UpdateCierreCursoEnPeriodo(int id_periodo, int id_curso)
        {
            bool ret = SiteProvider.Intranet.UpdateCierreCursoEnPeriodo(id_periodo, id_curso, true);
            BizObject.PurgeCacheItems("Intranet_CursoEnPeriodo");
            return ret;
        }
        public static bool UpdateEncuestaCursoEnPeriodo(int id_periodo, int id_curso)
        {
            bool ret = SiteProvider.Intranet.UpdateEncuestaCursoEnPeriodo(id_periodo, id_curso, true);
            BizObject.PurgeCacheItems("Intranet_CursoEnPeriodo");
            return ret;
        }
        public static bool InsertFormula(int id_curso, int id_periodo, string formula)
        {
            bool ret = SiteProvider.Intranet.InsertFormula(id_curso, id_periodo, formula);
            BizObject.PurgeCacheItems("Intranet_CursoEnPeriodo");
            return ret;
        }
        public static bool DeleteCursoEnPeriodo(int id_curso, int id_periodo)
        {
            bool ret = SiteProvider.Intranet.DeleteCursoEnPeriodo(id_curso, id_periodo);
            BizObject.PurgeCacheItems("Intranet_CursoEnPeriodo");
            return ret;
        }
        public static List<int> GetSemestres(int id_escuela, int id_periodo)
        {
            List<int> semestres = null;
            string key = "Intranet_Periodo";
            if (BaseIntranet.Settings.EnableCaching && BizObject.Cache[key] != null)
            {
                semestres = (List<int>)BizObject.Cache[key];
            }
            else
            {
                semestres = SiteProvider.Intranet.GetSemestres(id_escuela, id_periodo);
                BaseIntranet.CacheData(key, semestres);
            }
            return semestres;
        }
        public static List<CursoEnPeriodo> GetCursoEnPeriodo(int id_escuela, int id_periodo, int startRowIndex, int maximumRows)
        {
            List<CursoEnPeriodo> cursoperiodo = null;
            string key = "Intranet_Curso_" + startRowIndex.ToString() + "_" + maximumRows.ToString();
            if (BaseIntranet.Settings.EnableCaching && BizObject.Cache[key] != null)
            {
                cursoperiodo = (List<CursoEnPeriodo>)BizObject.Cache[key];
            }
            else
            {
                List<CursoEnPeriodoDetalles> recordset = SiteProvider.Intranet.GetCursoEnPeriodo(id_escuela, id_periodo,
                   GetPageIndex(startRowIndex, maximumRows), maximumRows);
                cursoperiodo = GetCursoenPeriodoListDeCursoenPeriodoDetallesList(recordset);
                BaseIntranet.CacheData(key, cursoperiodo);
            }
            return cursoperiodo;
        }
        private static CursoEnPeriodo GetCursoenPeriodoFromCursoenPeriodoDetalles(CursoEnPeriodoDetalles record)
        {
            if (record == null)
                return null;
            else
            {
                return new CursoEnPeriodo(record.Id_curso, record.Id_periodo, record.Doce_usua,
                   record.Cierre_curso, record.Actv_encu, record.Form_curso);
            }
        }
        private static List<CursoEnPeriodo> GetCursoenPeriodoListDeCursoenPeriodoDetallesList(List<CursoEnPeriodoDetalles> recordset)
        {
            List<CursoEnPeriodo> cursoperiodo = new List<CursoEnPeriodo>();
            foreach (CursoEnPeriodoDetalles record in recordset)
            {
                cursoperiodo.Add(GetCursoenPeriodoFromCursoenPeriodoDetalles(record));
            }
            return cursoperiodo;
        }
        public static List<Curso> GetCursobyDocente(string id_docente, int id_escuela, int id_periodo)
        {
            List<Curso> Curso = null;
            string key = "Intranet_Curso";
            if (BaseIntranet.Settings.EnableCaching && BizObject.Cache[key] != null)
            {
                Curso = (List<Curso>)BizObject.Cache[key];
            }
            else
            {
                List<CursoDetalles> recordset = SiteProvider.Intranet.GetCursobyDocente(id_docente, id_escuela, id_periodo);
                Curso = GetCursoListDeCursoDetallesList(recordset);
                BaseIntranet.CacheData(key, Curso);
            }
            return Curso;
        }
        private static Curso GetCursoFromCursoDetalles(CursoDetalles record)
        {
            if (record == null)
                return null;
            else
            {
                return new Curso(record.Id_curso, record.Id_escuela, record.Nomb_curs,
                   record.Cred_curs, record.Tipo_curs, record.Seme_curs, record.Actv_curs);
            }
        }
        private static List<Curso> GetCursoListDeCursoDetallesList(List<CursoDetalles> recordset)
        {
            List<Curso> curso = new List<Curso>();
            foreach (CursoDetalles record in recordset)
            {
                curso.Add(GetCursoFromCursoDetalles(record));
            }
            return curso;
        }
    }
}